home *** CD-ROM | disk | FTP | other *** search
/ Amiga Magazin: Amiga-CD 1996 March / Amiga-CD 1996 #3.iso / pd-software / mui_3.1 / developer / oberon / txt / muisupport.mod < prev    next >
Text File  |  1996-01-19  |  10KB  |  335 lines

  1. (*------------------------------------------
  2.  
  3.   :Module.      MuiSupport.mod
  4.   :Author.      Albert Weinert  [awn]
  5.   :Address.     Krähenweg 21 , 50829 Köln, Germany
  6.   :EMail.       Usenet_> aweinert@darkness.gun.de
  7.   :EMail.       Z-Netz_> A.WEINERT@DARKNESS.ZER
  8.   :Phone.       0221 / 580 29 84
  9.   :Revision.    $Revision: 1.2 $
  10.   :Date.        $Date: 1993/09/15 17:31:16 $
  11.   :Copyright.   Albert Weinert
  12.   :Language.    Oberon-2
  13.   :Translator.  Amiga Oberon 3.00d
  14.   :Contents.    Eine Nützliche Mui Prozeduren und Hooks.
  15.   :Imports.     <Importiertes, Name/ShortCut des Autors>
  16.   :Remarks.     <Was Du willst, evtl. Usage>
  17.   :Bugs.        <Bekannte Fehler>
  18.   :Usage.       <Angaben zur Anwendung>
  19.   :RCSId.       $Id: MuiSupport.mod,v 1.2 1993/09/15 17:31:16 A_Weinert Exp A_Weinert $
  20.   :History.
  21.   $Log: MuiSupport.mod,v $
  22. # Revision 1.2  1993/09/15  17:31:16  A_Weinert
  23. # PopupString geändert, nun wird keine CallBack mehr für an das Poup Object
  24. # gehängt (muss von hand gemacht werden, ist flexibler). Und LabelPopupString()
  25. # erstellt, dieses erstellt vor der Eingabezeile noch ein Label.
  26. #
  27. # Revision 1.1  1993/09/13  21:20:39  A_Weinert
  28. # Initial revision
  29. #
  30.  
  31. --------------------------------------------*)
  32. MODULE MuiSupport;
  33.  
  34. IMPORT  m := Mui,
  35.         Strings,
  36.         e := Exec,
  37.         u := Utility,
  38.         y := SYSTEM,
  39.         mb := MuiBasics;
  40.  
  41.   PROCEDURE LimitInteger*( hook : mb.Hook; obj : m.Object; args : mb.Args ):LONGINT;
  42.   (*------------------------------------------
  43.     :Input.     obj = Zu überprüfendes String-Objekt
  44.     :Input.     args = minValue, maxValue, DestObject, DestAttr
  45.     :Output.    0
  46.     :Semantic.  Überprüft den Wert eine Integer-String-Objektes ob er in dem
  47.     :Semantic.  Bereich von "minValue" und "MaxValue" liegt, wenn ein "DestObject"
  48.     :Semantic.  angegeben ist dann wird dem Objekt über das "DestAttr" den
  49.     :Semantic.  aktuellen Wert übergeben.
  50.     :Note.      Wenn man nur den Bereich überprüfen will, so muss als DestObject
  51.     :Note.      ein NIL übergeben werden.
  52.     :Update.    06-Sep-1993 [awn] - erstellt.
  53.   --------------------------------------------*)
  54.  
  55.     TYPE arg = STRUCT ( foo : mb.ArgsDesc);
  56.                  min       : LONGINT;
  57.                  max       : LONGINT;
  58.                  object    : m.Object;
  59.                  attribute : LONGINT;
  60.                END;
  61.  
  62.     VAR value : LONGINT;
  63.  
  64.     BEGIN
  65.       mb.Get( obj, m.aStringInteger, value );
  66.  
  67.       IF value < args(arg).min THEN value := args(arg).min;
  68.       ELSIF value > args(arg).max THEN value := args(arg).max END;
  69.  
  70.       mb.Set( obj, m.aStringInteger, value );
  71.  
  72.       IF args(arg).object # NIL THEN
  73.         mb.Set( args(arg).object, args(arg).attribute, value );
  74.       END;
  75.  
  76.       RETURN 0;
  77.     END LimitInteger;
  78.  
  79.   PROCEDURE HorizDash*();
  80.   (*------------------------------------------
  81.     :Semantic.  Erstellt eine Horizontale Trennlinie
  82.     :Note.
  83.     :Update.    06-Sep-1993 [awn] - erstellt.
  84.   --------------------------------------------*)
  85.     BEGIN
  86.       mb.RectangleObject;
  87.         mb.TextFrame;
  88.         mb.TagItem( m.aInnerTop,    0 );
  89.         mb.TagItem( m.aInnerBottom, 0 );
  90.         mb.TagItem( m.aVertWeight,  0 );
  91.       mb.end ;
  92.     END HorizDash;
  93.  
  94.   PROCEDURE VertDash*();
  95.   (*------------------------------------------
  96.     :Semantic.  Erstellt eine Vertikale Trennlinie
  97.     :Note.
  98.     :Update.    06-Sep-1993 [awn] - erstellt.
  99.   --------------------------------------------*)
  100.     BEGIN
  101.       mb.RectangleObject;
  102.         mb.TextFrame;
  103.         mb.TagItem( m.aInnerLeft,   0 );
  104.         mb.TagItem( m.aInnerRight,  0 );
  105.         mb.TagItem( m.aHorizWeight, 0 );
  106.       mb.end ;
  107.     END VertDash;
  108.  
  109.   PROCEDURE KeyButton*( s : ARRAY OF CHAR ): m.Object;
  110.     VAR pos : LONGINT;
  111.         key : CHAR;
  112.     BEGIN
  113.       pos := Strings.Occurs( s, "_" );
  114.       IF pos = -1 THEN
  115.         key := "\o";
  116.       ELSE
  117.         Strings.Delete( s, pos, 1 );
  118.         key := u.ToLower( s[pos] );
  119.       END;
  120.  
  121.       RETURN mb.KeyButton( s, key );
  122.     END KeyButton;
  123.  
  124.   PROCEDURE UpperKeyButton*( s : ARRAY OF CHAR ): m.Object;
  125.     VAR pos : LONGINT;
  126.         key : CHAR;
  127.     BEGIN
  128.       pos := Strings.Occurs( s, "_" );
  129.       IF pos = -1 THEN
  130.         key := "\o";
  131.       ELSE
  132.         Strings.Delete( s, pos, 1 );
  133.         key := u.ToUpper( s[pos] );
  134.       END;
  135.  
  136.       RETURN mb.KeyButton( s, key );
  137.     END UpperKeyButton;
  138.  
  139.   PROCEDURE KeyCheckMark*( s : ARRAY OF CHAR; checked : BOOLEAN ): m.Object;
  140.     VAR pos : LONGINT;
  141.         key : CHAR;
  142.     BEGIN
  143.       pos := Strings.Occurs( s, "_" );
  144.       IF pos = -1 THEN
  145.         key := "\o";
  146.       ELSE
  147.         Strings.Delete( s, pos, 1 );
  148.         key := u.ToLower( s[pos] );
  149.       END;
  150.  
  151.       mb.keyLabel1( s, key );
  152.       mb.Child; RETURN mb.KeyCheckMark( checked, key );
  153.     END KeyCheckMark;
  154.  
  155.   PROCEDURE KeyLabelString*( s : ARRAY OF CHAR; maxLen : LONGINT): m.Object;
  156.     VAR pos : LONGINT;
  157.         key : CHAR;
  158.     BEGIN
  159.       pos := Strings.Occurs( s, "_" );
  160.       IF pos = -1 THEN
  161.         key := "\o";
  162.       ELSE
  163.         Strings.Delete( s, pos, 1 );
  164.         key := u.ToLower( s[pos] );
  165.       END;
  166.         mb.keyLabel2( s, key );
  167.         mb.Child; mb.StringObject( m.aControlChar,  ORD( key ),
  168.                                    m.aStringMaxLen, maxLen,
  169.                                    m.aFrame,        m.vFrameString,
  170.                                    u.end);
  171.                   RETURN mb.End();
  172.     END KeyLabelString;
  173.  
  174.   PROCEDURE KeyLabel*( s : ARRAY OF CHAR; what : LONGINT );
  175.     VAR pos : LONGINT;
  176.         key : CHAR;
  177.     BEGIN
  178.       pos := Strings.Occurs( s, "_" );
  179.       IF pos = -1 THEN
  180.         key := "\o";
  181.       ELSE
  182.         Strings.Delete( s, pos, 1 );
  183.         key := u.ToLower( s[pos] );
  184.       END;
  185.       CASE what OF
  186.        | 0 : mb.keyLabel( s, key );
  187.        | 1 : mb.keyLabel1( s, key );
  188.        | 2 : mb.keyLabel2( s, key );
  189.       ELSE HALT (20) END;
  190.     END KeyLabel;
  191.  
  192.   PROCEDURE ImageButton*( img : LONGINT ):m.Object;
  193.     BEGIN
  194.       mb.ImageObject;
  195.         mb.ImageButtonFrame;
  196.         mb.Tags( m.aImageSpec, img,
  197.                  m.aImageFontMatchWidth, e.true,
  198.                  m.aImageFreeVert, e.true,
  199.                  m.aInputMode, m.vInputModeRelVerify,
  200.                  u.end );
  201.       RETURN mb.End();
  202.     END ImageButton;
  203.  
  204.   PROCEDURE PopupString*( s : ARRAY OF CHAR; maxLen : LONGINT; img : LONGINT ):m.Object;
  205.  
  206.     VAR pos : LONGINT;
  207.         key : CHAR;
  208.         str : m.Object;
  209.         dummy : m.Object;
  210.     BEGIN
  211.       pos := Strings.Occurs( s, "_" );
  212.       IF pos = -1 THEN
  213.         key := "\o";
  214.       ELSE
  215.         Strings.Delete( s, pos, 1 );
  216.         key := u.ToLower( s[pos] );
  217.       END;
  218.         mb.HGroup; mb.GroupSpacing( 1 );
  219.           mb.Child; mb.StringObject( m.aControlChar,  ORD( key ),
  220.                                      m.aStringMaxLen, maxLen,
  221.                                      m.aFrame,        m.vFrameString,
  222.                                      u.end);
  223.                     str := mb.End();
  224.           mb.Child; dummy := ImageButton( img );
  225.         mb.end;
  226.       RETURN str;
  227.  
  228.     END PopupString;
  229.  
  230.   PROCEDURE LabelPopupString*( s : ARRAY OF CHAR; maxLen : LONGINT; img : LONGINT ):m.Object;
  231.   (*------------------------------------------
  232.     :Input.     s : Zeichenkette die vor der Eingabezeile stehen soll
  233.     :Input.     hook : Hook welcher ausgeführt werden soll, wenn das Popup Objekt gedrückt wurde
  234.     :Output.    StringObject
  235.     :Semantic.
  236.     :Note.
  237.     :Update.    14-Sep-1993 [awn] - erstellt.
  238.   --------------------------------------------*)
  239.     VAR pos : LONGINT;
  240.         s2  : ARRAY 64 OF CHAR;
  241.         key : CHAR;
  242.     BEGIN
  243.       COPY (s, s2 );
  244.       pos := Strings.Occurs( s2, "_" );
  245.       IF pos = -1 THEN
  246.         key := "\o";
  247.       ELSE
  248.         Strings.Delete( s2, pos, 1 );
  249.         key := u.ToLower( s2[pos] );
  250.       END;
  251.       mb.keyLabel( s2, key ); mb.Child; RETURN PopupString( s, maxLen, img );
  252.     END LabelPopupString;
  253.  
  254.   PROCEDURE LabelCycle*( s : ARRAY OF CHAR; entries : e.APTR ):m.Object;
  255.     VAR pos : LONGINT;
  256.         key : CHAR;
  257.     BEGIN
  258.       pos := Strings.Occurs( s, "_" );
  259.       IF pos = -1 THEN
  260.         key := "\o";
  261.       ELSE
  262.         Strings.Delete( s, pos, 1 );
  263.         key := u.ToLower( s[pos] );
  264.       END;
  265.       mb.keyLabel( s, key ); mb.Child; RETURN mb.KeyCycle( entries,key );
  266.     END LabelCycle;
  267.  
  268.   PROCEDURE CheckMarkString*( s : ARRAY OF CHAR ):m.Object;
  269.     VAR obj : m.Object;
  270.         pos : LONGINT;
  271.         key : CHAR;
  272.     BEGIN
  273.       pos := Strings.Occurs( s, "_" );
  274.       IF pos = -1 THEN
  275.         key := "\o";
  276.       ELSE
  277.         Strings.Delete( s, pos, 1 );
  278.         key := u.ToLower( s[pos] );
  279.       END;
  280.       mb.HGroup;
  281.         mb.Child; obj := mb.KeyCheckMark( FALSE, key );
  282.         mb.Child; mb.TextObject( m.aTextContents, y.ADR( s ),
  283.                                  m.aTextHiChar, ORD( key ),
  284.                                  u.end );
  285.                   mb.end;
  286.       mb.end;
  287.       RETURN obj;
  288.     END CheckMarkString;
  289.  
  290.   PROCEDURE Slider*( s : ARRAY OF CHAR; min, max : LONGINT ):m.Object;
  291.     VAR pos : LONGINT;
  292.         key : CHAR;
  293.     BEGIN
  294.       pos := Strings.Occurs( s, "_" );
  295.       IF pos = -1 THEN
  296.         key := "\o";
  297.       ELSE
  298.         key := u.ToLower( s[pos] );
  299.       END;
  300.       RETURN mb.KeySlider( min, max, 0, key );
  301.     END Slider;
  302.  
  303.   PROCEDURE LabelSlider*( s : ARRAY OF CHAR; min, max : LONGINT ):m.Object;
  304.     BEGIN
  305.       KeyLabel( s, 1 ); mb.Child; RETURN Slider( s, min, max );
  306.     END LabelSlider;
  307.  
  308.   PROCEDURE ListDown*( list : m.Object );
  309.     VAR max, act : LONGINT;
  310.     BEGIN
  311.       mb.Get( list, m.aListEntries, max );
  312.       mb.Get( list, m.aListActive, act );
  313.       IF act < (max-1)  THEN
  314.         m.DoMethod( list, m.mListExchange, act, act+1 );
  315.         mb.Set( list, m.aListActive, act+1 );
  316.       END;
  317.     END ListDown;
  318.  
  319.   PROCEDURE ListUp*( list : m.Object );
  320.     VAR act : LONGINT;
  321.     BEGIN
  322.       mb.Get( list, m.aListActive, act );
  323.       IF act > 0  THEN
  324.         m.DoMethod( list, m.mListExchange, act, act-1 );
  325.         mb.Set( list, m.aListActive, act-1 );
  326.       END;
  327.     END ListUp;
  328.  
  329.   PROCEDURE ListRemove*( list : m.Object );
  330.     BEGIN
  331.       m.DoMethod( list, m.mListRemove, m.vListRemoveActive );
  332.     END ListRemove;
  333.  
  334. END MuiSupport.
  335.